/*-------------------------<-- Start of Description -->-------------------------*\ | PURPOSE: This macro sorts all input datasets by the same variables. | |--------------------------<-- End of Description -->----------------------------| |--------------------------------------------------------------------------------| |------------------------<-- Start of Files Created -->--------------------------| | SYNTAX: %sortall (indata = _input_datasets_, | | by = _sort_variable_list_, | | options = _options_for_proc_sort_) | \-------------------------<-- End of Files Created-->---------------------------*/ %macro sortall (indata=, by=, options=%str()) /des='Sorts multiple datasets' ; %let notes=%sysfunc(getoption(notes,keyword)) ; options nonotes ; %let starttime=%sysfunc(datetime()) ; %local num indata by i options data notes nvar ; %*----------------------* | initialize variables | *----------------------* ; %let indata = %cmpres(&indata) ; %let num = %words(&indata) ; %let options = %upcase(&options) ; %let by = %upcase(&by) ; %*-----------------------------------------------------------* | grab number of obs and check number of words in &indata | *-----------------------------------------------------------* ; %if &num = 0 %then %do ; %let data = %data(%scan(&sysdsn, 1).%scan(&sysdsn, 2)) ; %let nobs = %nobs (&data) ; %let nvar = %nvars (&data) ; options ¬es ; %put NOTE: No datasets are specified. The dataset &data will be used. ; %put NOTE: Dataset &data contains &nobs observations and &nvar variables. ; options nonotes ; proc sort data=&data &options ; by &by ; run ; %end ; %else %do i = 1 %to &num ; %let data = %data(%scan(&indata, &i, %str( ))) ; %let nobs = %nobs (&data) ; %let nvar = %nvars (&data) ; options ¬es ; %put NOTE: Dataset &data contains &nobs observations and &nvar variables. ; options nonotes ; proc sort data=&data &options ; by &by ; run ; %end ; options ¬es ; %if &options = %str() %then %put NOTE: All datasets are sorted by &by.. ; %else %put NOTE: All datasets are sorted by &by with options=&options.. ; options nonotes ; %timenote (macro=sortall, starttime=&starttime) %put ; options ¬es ; %mend sortall ;